package config

import (
	"github.com/magiconair/properties"
	"sync"
)

type Config struct {

	//	内部锁
	lock sync.RWMutex
	//	配置信息
	kv map[string]string
}

// NewConfig
//
//	@Description: 新建配置信息
//	@return *Config
func NewConfig() *Config {
	return &Config{kv: make(map[string]string), lock: sync.RWMutex{}}
}

// NewConfigByPropertiesFile
//
//	@Description: 通过properties配置文件获取配置信息
//	@param path
//	@return *Config
func NewConfigByPropertiesFile(path string) *Config {
	//	初始化config配置
	config := NewConfig()
	propertiesFile := properties.MustLoadFile(path, properties.UTF8)
	for _, k := range propertiesFile.Keys() {
		config.Set(k, propertiesFile.GetString(k, ""))
	}
	return config
}

// Set
//
//	@Description:
//	@receiver c
//	@param key
//	@param value
func (c *Config) Set(key string, value string) {
	c.lock.Lock()
	defer c.lock.Unlock()
	c.kv[key] = value
}

// Remove
//
//	@Description:  删除配置信息
//	@receiver c
//	@param key
func (c *Config) Remove(key string) {
	c.lock.Lock()
	defer c.lock.Unlock()
	delete(c.kv, key)
}

// Size
//
//	@Description:
//	@receiver c
//	@return int
func (c *Config) Size() int {
	return len(c.kv)
}

// Get
//
//	@Description: 	获取配置信息
//	@receiver c
//	@param key
//	@return interface{}
func (c *Config) Get(key string) string {
	c.lock.RLock()
	defer c.lock.RUnlock()
	return c.kv[key]
}

// ConfigItemList
//
//	@Description:	获取配置项-全部
//	@receiver c
//	@return map[string]string
func (c *Config) ConfigItemList() map[string]string {
	return c.kv
}
